import os
import pandas as pd

def split_csv_file():
    # 配置参数
    input_dir = "/Users/ziruizhao/Downloads"  # 输入文件目录
    file_name = "test1.csv"  # 输入文件名（CSV格式）
    max_rows = 50000  # 每个拆分文件的最大行数
    encodings = ['utf-8', 'gbk', 'gb2312', 'utf-16', 'iso-8859-1', 'cp936']  # 尝试常见编码
    
    # 构建完整路径
    file_path = os.path.join(input_dir, file_name)
    
    # 输出目录（同一文件夹）
    output_dir = input_dir
    os.makedirs(output_dir, exist_ok=True)
    
    # 获取文件名和扩展名
    base_name, ext = os.path.splitext(file_name)
    
    try:
        # 尝试不同的编码格式读取文件
        for encoding in encodings:
            try:
                print(f"尝试用 {encoding} 编码读取文件: {file_path}")
                # 分块读取大文件，使用新版pandas的参数
                chunk_iter = pd.read_csv(
                    file_path, 
                    chunksize=max_rows,
                    encoding=encoding,
                    on_bad_lines='skip'  # 跳过错误行（新版pandas参数）
                )
                
                part = 1
                for chunk in chunk_iter:
                    output_file = os.path.join(output_dir, f"{base_name}_{part}{ext}")
                    # 保存时指定编码为utf-8，确保兼容性
                    chunk.to_csv(output_file, index=False, encoding='utf-8')
                    print(f"已生成: {output_file}，包含 {len(chunk)} 行数据")
                    part += 1
                
                print(f"拆分完成，共生成 {part-1} 个文件")
                return  # 成功读取后退出函数
                
            except UnicodeDecodeError:
                continue  # 编码错误则尝试下一种编码
            except Exception as e:
                print(f"使用 {encoding} 编码处理时出错: {e}")
                continue
        
        # 如果所有编码都尝试失败
        print(f"所有编码尝试失败，无法读取文件 {file_path}")
            
    except Exception as e:
        print(f"处理文件时出错: {e}")

if __name__ == "__main__":
    split_csv_file()
    